Make `HTMLEditUtils::ContentIsInert` check `nsStyleUI::IsInert` instead of climbing up the tree However, we still need to climbing up the tree when `nsIFrame::GetPrimaryFrame()` returns `nullptr`. `<span inert style="display:none">` cases fail in Chrome. It must be caused by their editor's `Selection` normalization result, but I think that it's wrong behavior because `Selection` is a DOM API and the range is `inert`ed element. Therefore, it's odd to change the behavior from the style. Differential Revision: https://phabricator.services.mozilla.com/D170164 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1817127 gecko-commit: e428ebb115d902a7020ee853d54f81b43d32dfe7 gecko-reviewers: emilio 
diff --git a/inert/inert-inlines-around-selection-range-in-contenteditable.html b/inert/inert-inlines-around-selection-range-in-contenteditable.html index ff00e16..c22c798 100644 --- a/inert/inert-inlines-around-selection-range-in-contenteditable.html +++ b/inert/inert-inlines-around-selection-range-in-contenteditable.html 
@@ -85,6 +85,102 @@  const desc = `execCommand("delete") at ${t.name}`  assert_equals(editingHost.innerHTML, "af", `${desc}: <span inert> should be deleted`);  }, "a[bc<span inert>XYZ</span>de]f"); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert style="display:contents">a[bc</span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert style="display:contents">{abc</span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert><span style="display:contents">a[bc</span></span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert><span style="display:contents">{abc</span></span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert style="display:none">a[bc</span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert style="display:none">{abc</span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert><span style="display:none">a[bc</span></span><span>de]f</span>`); + + test(t => { + utils.setupEditingHost(t.name, { selection: "setBaseAndExtent" }); + const initialInnerHTML = editingHost.innerHTML; + document.execCommand("delete"); + const desc = `execCommand("delete") at ${t.name}` + assert_equals( + editingHost.innerHTML, + initialInnerHTML, + `${desc}: <span> content should not be deleted because anchor node of Selection is in the <span inert>` + ); + }, `<span inert><span style="display:none">{abc</span></span><span>de]f</span>`);  });  </script>  </head>